package com.sojson.util.pay.ali.constant;

import static com.sojson.constant.ConstantByMap.CERT_PATH;

import com.sojson.constant.Constant;
import com.sojson.constant.IpConfig;
import com.sojson.util.servlet.ServletUtil;
import com.sojson.util.text.Convert;

/**
 * 支付宝静态属性类
 * 
 * @author liu
 * @date 2020-11-02
 */
public interface AliConstant {

    // =======================================================================================================
    // =======================================================================================================
    // =======================================================================================================
    /** 支付宝环境代码(1:正式环境,2:测试环境) */
    Integer ENVIRONMENT = Convert.toInt(Constant.PROPERTIES.getProperty("so.environment.pay.zfb"), 2);
    // =======================================================================================================
    // =======================================================================================================
    // =======================================================================================================
    /** 失败CODE */
    String FAIL = "FAIL";
    /** 成功CODE */
    String SUCCESS = "SUCCESS";
    /** 回调失败CODE */
    String FAIL_CALL_BACK = "fail";
    /** 回调成功CODE */
    String SUCCESS_CALL_BACK = "success";
    /** 成功网关CODE */
    String SUCCESS_CODE = "10000";
    /** 成功业务CODE */
    String SUCCESS_SUB_CODE = null;

    // =======================================================================================================
    // ===============================================缓存中的Key===============================================
    // =======================================================================================================
    /** 支付宝网站应用appid */
    String WEB_APPID_CACHE_NAME = "ali_web_appid";
    /** 支付宝移动应用appid */
    String APP_APPID_CACHE_NAME = "ali_app_appid";
    /** 支付宝小程序应用appid */
    String XCX_APPID_CACHE_NAME = "ali_xcx_appid";
    /** 支付宝默认appid */
    String DEFAULT_APPID_CACHE_NAME = APP_APPID_CACHE_NAME;
    /** 支付宝公钥 */
    String KEY_PUBLIC = "ali_key_public";
    /** 支付宝私钥 */
    String KEY_PRIVATE = "ali_key_private";
    /** 支付宝STATE */
    String STATE_CACHE_NAME = "ali_state:";

    // =======================================================================================================
    // ================================================证书文件名================================================
    // =======================================================================================================
    /** 应用公钥证书文件名(alipayAppCertPublicKey.crt) */
    String CA_CERT_FILE_NAME_APP_CERT_PUBLIC = "alipayAppCertPublicKey.crt";
    /** 应用公钥证书文件路径(alipayAppCertPublicKey.crt) */
    String CA_CERT_FILE_PATH_APP_CERT_PUBLIC = CERT_PATH + "/" + CA_CERT_FILE_NAME_APP_CERT_PUBLIC;
    /** 支付宝公钥证书文件名(alipayCertPublicKey_RSA2.crt) */
    String CA_CERT_FILE_NAME_ALIPAY_CERT_PUBLIC_KEY = "alipayCertPublicKey_RSA2.crt";
    /** 支付宝公钥证书文件路径(alipayCertPublicKey_RSA2.crt) */
    String CA_CERT_FILE_PATH_ALIPAY_CERT_PUBLIC_KEY = CERT_PATH + "/" + CA_CERT_FILE_NAME_ALIPAY_CERT_PUBLIC_KEY;
    /** 支付宝根证书文件名(alipayRootCert.crt) */
    String CA_CERT_FILE_NAME_ALIPAY_ROOT_CERT = "alipayRootCert.crt";
    /** 支付宝根证书文件路径(alipayRootCert.crt) */
    String CA_CERT_FILE_PATH_ALIPAY_ROOT_CERT = CERT_PATH + "/" + CA_CERT_FILE_NAME_ALIPAY_ROOT_CERT;

    /** ----------------------------以下是支付宝接口返回的参数---------------------------- */
    /** ----------------------------以下是支付宝接口返回的参数---------------------------- */
    /** ----------------------------以下是支付宝接口返回的参数---------------------------- */
    // =======================================================================================================
    // =================================================用户信息================================================
    // =======================================================================================================
    // =======================================================================================================
    // =================================================支付接口================================================
    // =======================================================================================================
    /** 值-成功网关CODE */
    String RES_CODE_10000 = "10000";
    /** 值-业务处理失败CODE */
    String RES_CODE_40004 = "40004";
    /** 值-转账参与方[收款方]的标识[编号]类型(支付宝的会员ID) */
    String IDENTITY_TYPE_VALUE_ALIPAY_USER_ID = "ALIPAY_USER_ID";
    /** 值-转账参与方[收款方]的标识[编号]类型(支付宝登录号,支持邮箱和手机号格式) */
    String IDENTITY_TYPE_VALUE_ALIPAY_LOGON_ID = "ALIPAY_LOGON_ID";
    /** 值-转账状态(成功) */
    String WITHDRAW_DEPOSIT_STATUS_VALUE_SUCCESS = "SUCCESS";
    /** 值-转账状态(失败(具体失败原因请参见error_code以及fail_reason返回值)) */
    String WITHDRAW_DEPOSIT_STATUS_VALUE_FAIL = "FAIL";
    /** 值-转账状态(处理中) */
    String WITHDRAW_DEPOSIT_STATUS_VALUE_DEALING = "DEALING";
    /** 值-转账状态(退票) */
    String WITHDRAW_DEPOSIT_STATUS_VALUE_REFUND = "REFUND";
    /** 值-订单状态(交易创建,等待买家付款) */
    String TRADE_STATUS_VALUE_WAIT_BUYER_PAY = "WAIT_BUYER_PAY";
    /** 值-订单状态(在指定时间段内未支付时关闭的交易或在交易退完所有款时关闭的交易) */
    String TRADE_STATUS_VALUE_TRADE_CLOSED = "TRADE_CLOSED";
    /** 值-订单状态(商户签约的产品支持退款的前提下,交易支付成功和退部分款(退完最后一笔的时候是TRADE_CLOSED)的时候) */
    String TRADE_STATUS_VALUE_TRADE_SUCCESS = "TRADE_SUCCESS";
    /** 值-订单状态(商户签约的产品不支持退款的前提下,买家付款成功;或者,商户签约的产品支持退款功能的前提下,交易已经成功并且已经超过可退款期限) */
    String TRADE_STATUS_VALUE_TRADE_FINISHED = "TRADE_FINISHED";
    /** 值-产品码(WEB端)(支付)(新快捷即时到账产品) */
    String PRODUCT_CODE_VALUE_WEB_FAST_INSTANT_TRADE_PAY = "FAST_INSTANT_TRADE_PAY";
    /** 值-产品码(WAP端)(支付)(无线快捷支付产品) */
    String PRODUCT_CODE_VALUE_WAP_QUICK_WAP_WAY = "QUICK_WAP_WAY";
    /** 值-产品码(APP端)(支付)(无线快捷支付产品) */
    String PRODUCT_CODE_VALUE_APP_QUICK_MSECURITY_PAY = "QUICK_MSECURITY_PAY";
    /** 值-产品码(APP端)(支付)(周期扣款产品) */
    String PRODUCT_CODE_VALUE_APP_CYCLE_PAY_AUTH = "CYCLE_PAY_AUTH";
    /** 值-产品码(所有端)(单笔转账)(单笔无密转账到支付宝账户) */
    String PRODUCT_CODE_VALUE_ALL_TRANS_ACCOUNT_NO_PWD = "TRANS_ACCOUNT_NO_PWD";
    /** 值-产品码(所有端)(单笔转账)(收发现金红包) */
    String PRODUCT_CODE_VALUE_ALL_STD_RED_PACKET = "STD_RED_PACKET";
    /** 值-描述特定的业务场景(所有端)(单笔转账)(单笔无密转账到支付宝,B2C现金红包) */
    String BIZ_SCENE_VALUE_ALL_DIRECT_TRANSFER = "DIRECT_TRANSFER";
    /** 值-描述特定的业务场景(所有端)(单笔转账)(C2C现金红包-领红包) */
    String BIZ_SCENE_VALUE_ALL_PERSONAL_COLLECTION = "PERSONAL_COLLECTION";
    /** 值-用于获取进入页面的用户的 userId */
    String SCOPES_VALUE_ALL_AUTH_BASE = "auth_base";
    /** 值-是用来获取用户的基本信息的 */
    String SCOPES_VALUE_ALL_AUTH_USER = "auth_user";
    /** 值-通过授权码获取用户信息 */
    String GRANT_TYPE_VALUE_ALL_AUTHORIZATION_CODE = "authorization_code";
    /** 值-通过refresh_token刷新用户信息 */
    String GRANT_TYPE_VALUE_ALL_REFRESH_TOKEN = "refresh_token";
    /** 参数: 内容编码格式 */
    String FIELD_CHARSET = "charset";
    /** 参数: 签名类型 */
    String FIELD_NAME_SIGN_TYPE = "sign_type";
    /** 参数: 授权码 */
    String FIELD_AUTH_CODE = "auth_code";
    /** 参数:  */
    String FIELD_STATE = "state";
    // =======================================================================================================
    // =================================================状态码=================================================
    // =======================================================================================================

    // =======================================================================================================
    // =======================================================================================================
    // =======================================================================================================
    /** 回调地址(商城) */
    String NOTIFY_URL_GOODS = IpConfig.url + ServletUtil.getMappingUrl("/notify/pay/ali/goods");

    /** 回调地址(诚意金) */
    String NOTIFY_URL_ORDER_DEPOSIT = IpConfig.url + ServletUtil.getMappingUrl("/notify/pay/ali/deposit");

    /** 回调地址(新签) */
    String NOTIFY_URL_PAY_NEW = NOTIFY_URL_GOODS;
    /** 回调地址(续租) */
    String NOTIFY_URL_PAY_GO_ON = IpConfig.url + ServletUtil.getMappingUrl("/notify/pay/ali/notifyPayGoOn");

}